#ifndef SIGNALCENTER_H
#define SIGNALCENTER_H

#include <QObject>
#include "util.h"

#define SIGNALCENTER SignalCenter::instance()

/**
 * @brief The SignalCenter class 单例模式的类，不允许创建该类的对象，只能使用公共接口访问该类
 * 实现单例的核心步骤如下：
    私有化构造函数：阻止外部使用 new 来创建实例。
    删除拷贝构造和赋值操作：防止复制或赋值实例。
    提供一个静态的访问方法：通过一个静态方法 instance() 来获取唯一的对象实例。
    存储唯一实例的静态变量：实例保存在静态变量中，程序的生命周期内始终存在。
 */
class SignalCenter : public QObject
{
    Q_OBJECT
private:
    explicit SignalCenter(QObject *parent = nullptr);

public:
    static SignalCenter &instance()
    {
        static SignalCenter instance; //单例模式,全局只有一个，内部使用构造来生成
        return instance;
    }

    //禁止拷贝和复制
    SignalCenter(const SignalCenter &) = delete;

    SignalCenter &operator=(const SignalCenter &) = delete;

signals:
    void audioDataComputeCompleted(float value, role r);
    void audioVolumeChange(float value);
    void intputAudioVolumeChange(float value);
    void clearProBarVolume(role r);
    void IODeviceOpenFileFailed();
    void audioPlayFinshed();
    void closeWidget();
    void toolBtnPhoneClicked();
    void loginSuccessed();
};

#endif // SIGNALCENTER_H
